<?php

/**
 * Permite admininstrar el crud para CartaAlimentos
 */
class CartaAlimentosController extends AweController
{

    /**
     * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
     * using two-column layout. See 'protected/views/layouts/column2.php'.
     */
    public $layout = '//layouts/column2';
    public $defaultAction = 'adminMenu';

    public function filters()
    {
        return array(
            array('CrugeAccessControlFilter'),
        );
    }

    /**
     * Creates a new model.
     * If creation is successful, the browser will be redirected to the 'view' page.
     */
    public function actionCreate()
    {
        $model = new CartaAlimentos;
        if (isset($_POST['CartaAlimentos'])) {
            $cartaNut = new CartaNutricional;
            $cartaNut->nombre = $_POST['CartaAlimentos']['nombreTipoCarta'];
            $cartaNut->descripcion = $_POST['CartaAlimentos']['descripcionTipoCarta'];
            $cartaNut->tipo_carta_id = $_POST['CartaAlimentos']['tipoCarta'];
            $alimentos = array();
            $aux = array();
            if (isset($_POST['CartaAlimentos']['cantidad'])) {
                foreach ($_POST['CartaAlimentos']['cantidad'] as $key => $cantidad) {
                    foreach ($_POST['CartaAlimentos']['medida'] as $key1 => $porciones) {
                        if ($key == $key1) {
                            foreach ($porciones as $medida => $valor) {
                                $aux['alimentos_id'] = $key;
                                $aux['cantidad'] = $cantidad['value'];
                                $aux['medida'] = $medida;
                                array_push($alimentos, $aux);
                                $aux = array();
                            }
                        }
                    }
                }
                $aceptado = false;
                $saveNutri = true;
                //validadores
                $validadorMaestro = false;
                $validadorDetalle = false;
                if ($cartaNut->validate()) {
                    $validadorMaestro = true;
                }
                if ($validadorMaestro == true) {
                    foreach ($alimentos as $value) {
                        foreach ($_POST['CartaAlimentos']['variante'] as $key2 => $variantes) {
                            if ($value['alimentos_id'] == $key2) {
                                foreach ($variantes as $variante) {
                                    $validadorDetalle = CartaAlimentos::model()->validateOrSaveAlimentoMenu(null, $value, $variante, $_POST['CartaAlimentos']);
                                    if ($validadorDetalle == false) {
                                        $validadorMaestro = false;
                                    }
                                }
                            }
                        }
                    }
                }
                if ($validadorMaestro == true) {
                    if ($cartaNut->save()) {
                        $aceptado = true;
                        $idCartaNut = $cartaNut->id;
                        foreach ($alimentos as $value) {

                            foreach ($_POST['CartaAlimentos']['variante'] as $key2 => $variantes) {
                                if ($value['alimentos_id'] == $key2) {
                                    foreach ($variantes as $variante) {
                                        $result = CartaAlimentos::model()->validateOrSaveAlimentoMenu($idCartaNut, $value, $variante, $_POST['CartaAlimentos']);
                                        if ($result != true) {
                                            $aceptado = false;
                                        }
                                    }
                                }
                            }
                        }
                    } else {
                        $saveNutri = false;
                        Yii::app()->user->setFlash('error', "El nombre de men&uacute; ya existe . ");
                    }
                }
                if ($aceptado == true) {
                    Yii::app()->user->setFlash('success', "Creaci&oacute;n exitosa del men&uacute; de alimentos!");
                    $this->redirect(array('adminMenu'));
                } else {
                    Yii::app()->user->setFlash('error', "No se pudo crear el men&uacute; de alimentos por favor intente nuevamente. ");
                }
            }
        }

        $submodel = new Alimentos('search');
        $submodel->unsetAttributes();
        $columns = $submodel->searchColumns();
        $ajaxUrl = $this->createUrl("cartaAlimentos/create");
        $widget = $this->getMenuEdataWidget($columns, $submodel, $ajaxUrl); //        $widget = $this->createWidget('ext.EDataTables.EDataTables', array(
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            echo json_encode($widget->getFormattedData(intval($_GET['sEcho'])));
            Yii::app()->end();
            return;
        }
        $this->render('_formMaestro', array(
            'model' => $model, //cartaAlimentos
            'widget' => $widget, //buscadoralimentos
        ));
    }

    /**
     * Updates a particular model.
     * If update is successful, the browser will be redirected to the 'view' page.
     * @param integer $id the ID of the model to be updated
     */
    public function actionUpdate($id = null)
    {
        $alimentos = CartaAlimentos::model()->de_menu_id($id)->findAll();
        $model = CartaAlimentos::model()->findByPk((int) $alimentos[0]['oldValues']['id']);
        $cartaNutricional = CartaNutricional::model()->findbypk((int) $id);
        $model->tipoCarta = $cartaNutricional->tipo_carta_id;
        $model->nombreTipoCarta = $cartaNutricional->nombre;
        $model->descripcionTipoCarta = $cartaNutricional->descripcion;
        if (isset($_POST['CartaAlimentos'])) {
//            actualiza los atributos del modelo cartaNutricional
            $cartaNutricional->nombre = $_POST['CartaAlimentos']['nombreTipoCarta'];
            $cartaNutricional->descripcion = $_POST['CartaAlimentos']['descripcionTipoCarta'];
            $cartaNutricional->tipo_carta_id = $_POST['CartaAlimentos']['tipoCarta'];
            $alimentos = array();
            $aux = array();
            if (isset($_POST['CartaAlimentos']['cantidad'])) {
                foreach ($_POST['CartaAlimentos']['cantidad'] as $key => $cantidad) {
                    foreach ($_POST['CartaAlimentos']['medida'] as $key1 => $porciones) {
                        if ($key == $key1) {
                            foreach ($porciones as $medida => $valor) {
                                $aux['alimentos_id'] = $key;
                                $aux['cantidad'] = $cantidad['value'];
                                $aux['medida'] = $medida;
//                                agrega el alimento con la cantidad y la medida correspondiente
                                array_push($alimentos, $aux);
                                $aux = array();
                            }
                        }
                    }
                }
                $aceptado = false;
                $saveNutri = true;
                //validadores
                $validadorMaestro = false;
                $validadorDetalle = false;
                if ($cartaNutricional->validate()) {
                    $validadorMaestro = true;
                }
                if ($validadorMaestro == true) {
                    foreach ($alimentos as $value) {
                        foreach ($_POST['CartaAlimentos']['variante'] as $key2 => $variantes) {
                            if ($value['alimentos_id'] == $key2) {
                                foreach ($variantes as $variante) {
                                    $validadorDetalle = CartaAlimentos::model()->updateAlimentoMenu($cartaNutricional->id, $value, $variante, $_POST['CartaAlimentos'], true);
                                    if ($validadorDetalle == false) {
                                        $validadorMaestro = false;
                                    }
                                }
                            }
                        }
                    }
                }
//                Actualiza la cartaNutricional con los nuevos atributos 
                if ($cartaNutricional->save()) {
                    $aceptado = true;
                    $idCartaNut = $cartaNutricional->id;
                    foreach ($alimentos as $value) {
                        foreach ($_POST['CartaAlimentos']['variante'] as $key2 => $variantes) {
                            if ($value['alimentos_id'] == $key2) {
                                foreach ($variantes as $variante) {
//                                    actualiza la cartaAlimentos 
                                    $result = CartaAlimentos::model()->updateAlimentoMenu($idCartaNut, $value, $variante, $_POST['CartaAlimentos'], false);
                                    if ($result != true) {
                                        $aceptado = false;
                                    }
                                }
                            }
                        }
                    }
                } else {
                    $saveNutri = false;
                    Yii::app()->user->setFlash('error', "El nombre de men&uacute; ya existe . ");
                }
                if ($aceptado == true) {
                    Yii::app()->user->setFlash('success', "actualizaci&oacute;n exitosa del menu de alimentos!");
                    $this->redirect(array('adminMenu'));
                } else {
                    Yii::app()->user->setFlash('error', "No se pudo actualizar el men&uacute; de alimentos por favor intente nuevamente. ");
                }
            }
        }
        $submodel = new Alimentos('search');
        $submodel->unsetAttributes();
        $columns = $submodel->searchColumns();
        $ajaxUrl = $this->createUrl("cartaAlimentos/ajaxMaestro");
        $widget = $this->getMenuEdataWidget($columns, $submodel, $ajaxUrl); //        $widget = $this->createWidget('ext.EDataTables.EDataTables', array(
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            echo json_encode($widget->getFormattedData(intval($_GET['sEcho'])));
            Yii::app()->end();
            return;
        }
        $this->render('_formMaestro', array(
            'model' => $model, //cartaAlimentos
            'widget' => $widget, //buscadoralimentos
        ));
    }

    /**
     * FunciÃ³n AJAX
     * Provee de un string de ids de los alimentos de un menu separados por comas
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param integer $id menu 
     */
    public function actionGetAlimentosMenu($id)
    {
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            $alimentosList = "";
            $alimentosMenu = CartaAlimentos::model()->de_menu_id($id)->findAll();
            foreach ($alimentosMenu as $key => $value) {
                $alimentosList.="," . $value['oldValues']['alimentos_id'];
            }
            echo json_encode($alimentosList);
        }
    }

    /**
     * FunciÃ³n AJAX
     * Provee de un string de ids y cantidad de los alimentos de un menu separados por comas
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param integer $id menu 
     */
    public function actionGetAlimentosPorcionesMenu($id)
    {
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            $alimentosList = "";
            $alimentosMenu = CartaAlimentos::model()->de_menu_id($id)->findAll();
            foreach ($alimentosMenu as $key => $value) {
                $alimentosList.="," . $value['oldValues']['alimentos_id'] . "-" . $value['oldValues']['cantidad'];
            }
            echo json_encode($alimentosList);
        }
    }

    /**
     * FunciÃ³n AJAX
     * Proporciona informacion de los alimentos de un menu
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param integer $ id identificador del menu
     */
    public function actionGetInfoAlimentosMenu($id)
    {
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            $alimentosMenu = CartaAlimentos::model()->de_menu_id($id)->findAll();
            $alimento = array();
            foreach ($alimentosMenu as $key => &$value) {
                $alimento[$value['oldValues']['alimentos_id']] = array($value['oldValues']['medida'], $value['oldValues']['variantes_carta_id'], $value['oldValues']['cantidad']);
            }
            echo json_encode($alimento);
        }
    }

    /**
     * Permite administrar los menus
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     */
    public function actionAdminMenu()
    {
        $model = new CartaNutricional('search');
        $model->unsetAttributes(); // clear any default values
        $query = $model->contarDatos();
        if ($query > 0) {
            $columns = $model->searchColumns();
            $widget = $this->createWidget('ext.EDataTables.EDataTables', array(
                'id' => 'carta-nutricional-grid',
                'template' => '{items}{summary}{pager}',
                'dataProvider' => $model->search($columns),
                'itemsCssClass' => 'table table-striped table-hover compact row-border',
                'ajaxUrl' => $this->createUrl($this->getAction()->getId()),
                'columns' => array(
                    array(
                        'class' => 'ext.EDataTables.EButtonColumn',
                        'template' => '{alimentos}',
                        'htmlOptions' => array('class' => 'span1'),
                        'buttons' => array(
                            'alimentos' => array(
                                'label' => '<button class="btn btn-warning"><i class=" icon-search" ></i></button>',
                                'options' => array(
                                    "title" => Yii::t('AweCrud.app', 'Ver ComposiciÃ³n'),
                                    'id' => '$data->id',
                                ),
                                'click' => 'js: function(e) { e.preventDefault();loadGrafica($(this).attr("id"));}',
                            ),
                        ),
                    ),
                    'nombre',
                    'descripcion',
                    array(
                        'name' => 'tipo_carta_id',
                        'value' => 'isset($data->tipoCarta) ? $data->tipoCarta : null',
//                        'filter' => CHtml::listData(TipoCarta::model()->findAll(), 'id', TipoCarta::representingColumn()),
                    ),
                    array(
                        'name' => 'edad',
                        'value' => 'isset($data->cartaAlimentoses)? CartaAlimentos::model()->de_edad_id($data->id) : null',
                    ),
                    array(
                        'class' => 'ext.EDataTables.EButtonColumn',
                        'template' => '{actualizar}',
                        'htmlOptions' => array('class' => 'span2'),
                        'buttons' => array(
                            'actualizar' => array('label' => '<button class="btn btn-success"><i class="icon-pencil"></i></button>',
                                'options' => array(
                                    'title' => Yii::t('AweCrud.app', 'Update'),
                                    "id" => '$data->id',
                                ),
                                'type' => 'raw',
                                'visible' => Yii::app()->user->checkAccess("admin") || Yii::app()->user->checkAccess("nutricion") ? 'true' : 'false',
                                'url' => 'Yii::app()->createUrl("carta/cartaAlimentos/update", array("id" => $data->id))',
                            ),
                        ),
                        'htmlOptions' => array(
                            'width' => '10',
                        ),
                    ),
                ),
            ));
            if (Yii::app()->getRequest()->getIsAjaxRequest()) {
                echo json_encode($widget->getFormattedData(intval($_GET['sEcho'])));
                Yii::app()->end();
                return;
            }
            $this->render('admin', array('widget' => $widget,));
        } else {
            $this->render('empty', array());
        }
    }

    /**
     * FunciÃ³n AJAX
     * Permite recoger los datos correspondientes a los valores nutricionales de un menu y sus alimentos
     * con ajax POST
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @return type
     * @throws CHttpException
     */
    public function actionVerValoresNutricionalesMenu()
    {
        if (Yii::app()->request->isAjaxRequest) {
            $menu = [];
            $menu = CartaAlimentos::model()->alimentos_de_menu($_POST['id']);
            $cartaMenu = CartaNutricional::model()->findByPk((int) $_POST['id']);
            $model = new CartaAlimentos();
            $report = $model->reportSumValNutMenuAlimentos($_POST['id']);
            $auxb = $model->de_carta_nutricional_id($_POST['id'])->find();

            $seriesMinMax = RangoNutrientes::model()->
                formatSeriesRangosNutrientes($auxb->edades_id, $cartaMenu->tipo_carta_id);
            $report['series'][1] = $seriesMinMax[1];
            $report['series'][2] = $seriesMinMax[2];
            
            $body['report'] = $report;
            $body['menu'] = $menu;


//            var_dump($body['report']['series']);
//            var_dump($auxb->edades_id); //edad
//            var_dump($cartaMenu->tipo_carta_id); //tiempo comida
//            die();
            echo CJSON::encode(array(
                'header' => $cartaMenu->nombre . " " . $cartaMenu->descripcion,
                'body' => $body,
            ));
            return;
        } else
            throw new CHttpException('403', 'Forbidden access.');
    }

    /**
     * Returns the data model based on the primary key given in the GET variable.
     * If the data model is not found, an HTTP exception will be raised.
     * @param integer the ID of the model to be loaded
     */
    public function loadModel($id, $modelClass = __CLASS__)
    {
        $model = CartaAlimentos::model()->findByPk((int) $id);
        if ($model === null)
            throw new CHttpException(404, 'The requested page does not exist.');
        return $model;
    }

    /**
     * Performs the AJAX validation.
     * @param CModel the model to be validated
     */
    protected function performAjaxValidation($model, $form = null)
    {
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'carta-alimentos-form') {
            echo CActiveForm::validate($model);
            Yii::app()->end();
        }
    }

    /**
     * Action que renderiza a la vista _formMaestro, en donde se crea menus
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     */
    public function actionAjaxMaestro()
    {
        $model = new CartaAlimentos;
        $submodel = new Alimentos('search');
        $submodel->unsetAttributes();
        $columns = $submodel->searchColumns();
        $ajaxUrl = $this->createUrl($this->getAction()->getId());
        $widget = $this->getMenuEdataWidget($columns, $submodel, $ajaxUrl);
        if (Yii::app()->getRequest()->getIsAjaxRequest()) {
            echo json_encode($widget->getFormattedData(intval($_GET['sEcho'])));
            Yii::app()->end();
            return;
        }
        $this->render('_formMaestro', array(
            'model' => $model, //cartaAlimentos
            'widget' => $widget, //buscadoralimentos
        ));
    }

    /**
     * Construye el widget para la extension EDataTables
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param array $columns las columnas que van a ser buscadas por el metodo search
     * @param model $submodel el modelo en donde va a buscar los datos
     * @param String $ajaxUrl la url en donde enviara las peticiones para la actualizacion ajax
     * @return widget ext.EDataTables.EDataTables
     */
    private function getMenuEdataWidget($columns, $submodel, $ajaxUrl)
    {
        $widget = $this->createWidget('ext.EDataTables.EDataTables', array(
            'id' => 'alimentos_menu-grid',
            'template' => '{items}{summary}{pager}',
            'dataProvider' => $submodel->search($columns),
            'itemsCssClass' => 'table table-striped table-hover compact row-border',
            'ajaxUrl' => $ajaxUrl,
            'columns' => array(
                array(
                    'class' => 'ext.EDataTables.EButtonColumn',
                    'template' => '{cosa}',
                    'buttons' => array(
                        'cosa' => array('label' => '<button class="btn btn-mini btn-info"><i class="icon icon-search"></i></button>',
                            'options' => array(
                                'title' => 'Valores nutricionales',
                                'id' => '$data->id',
                            ),
                            'type' => 'raw',
                            'click' => 'js: function(e) { e.preventDefault();busquedaValoresNutri($(this).attr("id"));  $("#modalFormulariosNivel1").modal("show");}',
                        ),
                    ),
                ),
                array(
                    'class' => 'ext.EDataTables.ECheckBoxColumn',
                    'name' => 'id_alimentosmenu',
                    'id' => 'check',
                    'selectableRows' => 2,
                    'value' => '$data->id',
                ),
                'nombre',
                'descripcion',
                array(
                    'name' => 'categoria_id',
                    'value' => 'isset($data->categoria) ? $data->categoria : null',
                ),
                array(
                    'name' => 'subcategoria_id',
                    'value' => 'isset($data->subcategoria) ? $data->subcategoria : null',
                ),
            ),
        ));
        return $widget;
    }
    /**
     * Deletes a particular model.
     * If deletion is successful, the browser will be redirected to the 'admin' page.
     * @param integer $id the ID of the model to be deleted
     */
//    public function actionDelete($id) {
//        if (Yii::app()->request->isPostRequest) {
//            // we only allow deletion via POST request
//            $this->loadModel($id)->delete();
//
//            // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
//            if (!isset($_GET['ajax']))
//                $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
//        } else
//            throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
//    }
}
